/**
 * 
 */
package model;

import java.io.IOException;
import java.util.ArrayList;

import model.container.CursistenException;
import persistenty.TekstPersisteerbaar;

/**
 * Deze klasse bevat de nodige code om een cursushistoriek object aan te maken
 * 
 * @author Nicolas Vanderhulst
 * @author Yves Vandeput
 * @version 200111009
 */

public abstract class Cursist implements Comparable<Cursist>, Cloneable, TekstPersisteerbaar {

	private int cursistNummer;
	private String naam;

	public String getNaam() {
		return naam;
	}

	public void setNaam(String naam) {
		this.naam = naam;
	}

	public int getCursistNummer() {
		return cursistNummer;
	}

	public void setCursistNummer(int cursistNummer) {
		this.cursistNummer = cursistNummer;
	}

	// default constructor
	public Cursist() {
	}

	// Basis constructor
	public Cursist(String cursistnaam, int cursistnummer) {
		setCursistNummer(cursistnummer);
		setNaam(cursistnaam);
	}

	// Constructor met voorgaande cursussen
	public Cursist(String cursistnaam, int cursistnummer, ArrayList<CursusHistoriek> voorgaandeCursussen) {
		this.setCursistNummer(cursistnummer);
		this.setNaam(cursistnaam);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Cursist [cursistNummer=" + cursistNummer + ", naam=" + naam + "]";
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + cursistNummer;
		result = prime * result + ((naam == null) ? 0 : naam.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Cursist)) {
			return false;
		}
		Cursist other = (Cursist) obj;
		if (cursistNummer != other.cursistNummer) {
			return false;
		}
		if (naam == null) {
			if (other.naam != null) {
				return false;
			}
		} else if (!naam.equals(other.naam)) {
			return false;
		}
		return true;
	}

	@Override
	public abstract Cursist maakObjectVanTekst(String input) throws IOException, NumberFormatException,
			CursistenException;

	@Override
	public abstract String maakTekstVanObject() throws IOException;

	@Override
	public void setID(int id) {
		cursistNummer = id > 0 ? id : cursistNummer;

	}

	@Override
	public int getID() {

		return cursistNummer;
	}

	@Override
	public int compareTo(Cursist arg0) {
		// TODO Auto-generated method stub
		return 0;
	}
}
